package com.xxg.renrenorder.service;

import com.xxg.renrencommon.domain.result.BaseResult;
import com.xxg.renrencommon.domain.result.PageInfoResult;
import com.xxg.renrenorder.dao.bean.OrderMasterInfo;
import com.xxg.renrenorder.domain.query.*;
import com.xxg.renrenorder.domain.result.OrderMasterInfoResult;
import com.xxg.renrenorder.domain.result.ReFundResult;

import java.util.List;

/**
 * 类说明
 *
 * @author szj
 * @date 2021/12/7
 */
public interface OrderService {
    /**
     * 分页获取订单
     *
     * @param userId      会员ID
     * @param orderStatus 订单状态
     * @param pageNo      页码
     * @param pageSize    页大小
     * @return 订单列表
     */
    BaseResult<List<OrderMasterInfo>> getOrdersByStatus(String userId, Integer orderStatus, Integer pageNo, Integer pageSize);

    /**
     * 分页获取所有订单（时间倒序）
     *
     * @param orderStatus    订单状态（多种状态)
     * @param pageNo         页码
     * @param pageSize       页大小
     * @param startDate      开始日期字符串
     * @param endDate        接数日期字符串
     * @param orderListQuery 其他查询条件
     * @param shopId
     * @param account
     * @return BaseResult<PageInfoResult < OrderMasterInfo>>
     */
    BaseResult<PageInfoResult<OrderMasterInfo>> getAllOrdersByStatus(List<Integer> orderStatus, Integer pageNo, Integer pageSize, String startDate, String endDate, OrderListQuery orderListQuery, String shopId, String account);

    /**
     * 结算
     *
     * @param userId 登录id
     * @param query  结算信息
     * @return BaseResult<OrderMasterInfo>
     */
    BaseResult<OrderMasterInfo> settleAccounts(String userId, SettleAccountsQuery query);

    /**
     * 提交订单
     *
     * @param userId 登录id
     * @param query  提交订单参数
     * @return 订单id字符串
     */
    BaseResult<String> submitOrder(String userId, SubmitOrderQuery query);

    /**
     * 支付超时取消订单
     *
     * @param id 订单id
     * @return boolean
     */
    boolean cancelOrderById(String id);

    /**
     * 支付超时取消订单
     *
     * @param id        订单id
     * @param userIdStr 用户id字符串
     * @return BaseResult<Void>
     */
    BaseResult<Void> cancelOrderById(String id, String userIdStr);

    /**
     * 确认收货
     *
     * @param id      订单ID
     * @param userId  会员ID
     * @param shopId
     * @param account
     * @return 结果
     */
    BaseResult<Void> commitOrderById(String id, String userId, String shopId, String account);

    /**
     * 发货10天后未确认收货则自动确认收货
     *
     * @param id 订单ID
     * @return 结果 true-自动确认
     */
    boolean autoCommitOrder(String id);

    /**
     * 确认收货15天后自动关闭售后功能
     *
     * @param id 订单ID
     * @return 结果 true-自动关闭售后
     */
    boolean autoDisableOrderAfterService(String id);

    /**
     * 后台接口设置普通订单的物流信息
     *
     * @param query   后台接口设置普通订单的物流信息参数
     * @param userId  登录id
     * @param shopId  店铺id
     * @param account 账号
     * @return BaseResult<Void>
     */
    BaseResult<Void> setOneOrderExpress(SetOneOrderExpressQuery query, String userId, String shopId, String account);

    /**
     * 更新带货商品底下的所有库存和销量
     *
     * @param query 更新带货商品底下的所有库存和销量
     * @return BaseResult<Void>
     */
    BaseResult<Void> updateCarryProduct(UpdateCarryProductQuery query);

    /**
     * 查看普通订单详情
     *
     * @param id     订单ID
     * @param userId 当前用户id
     * @return 订单详情
     */
    BaseResult<OrderMasterInfoResult> getOrderById(String id, String userId);

    /**
     * 删除用户自己的普通订单
     *
     * @param id     订单ID
     * @param userId 会员ID
     * @return 结果
     */
    BaseResult<Void> removeOrderById(String id, String userId);

    /**
     * 设置已完成退款
     *
     * @param id       售后订单
     * @param response 退款交易信息
     * @return 结果
     */
    BaseResult<Void> finishAfterSalesOrder(String id, ReFundResult response);
}
